﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using System.Collections;
//using System.Xml;
using System.IO;



class CrearBloque : MonoBehaviour
{
	public static CrearBloque SP;

	//private string msFicheroLevel;
	//private string msFicheroConfigLevel;
	
	public GameObject mBrick1;
	//public Texture mTexturaNaranja;

	public Vector3 mvPosicionInicial;
	public Vector3 mvEscalaInicial;
	public float mfSeparacionX;
	public float mfSeparacionZ; //altura

	public static int miNumeroBloques;

	public static List<Regalo> mRegalos;

	public void CargaInicial(int liLevel)
	{
		//mBrick1 = new GameObject();
		//mBrick1.tag = "Pickup";

		//msFicheroConfigLevel = "Assets/ArkanoidGame/Levels/ConfigLevel.xml";
		//msFicheroLevel = "Assets/ArkanoidGame/Levels/Level01.xml";   //ya no va esto! ahora desde fichero

		mvPosicionInicial = new Vector3(-16.5f, 1.5f, 28f);
		//mvEscalaInicial = new Vector3(101.4659f, 50.4845f, 53.37144f);
		mvEscalaInicial = new Vector3(3f, 3f, 1.8f);
		mfSeparacionX = 3.3f;
		mfSeparacionZ = -2.25f;

		miNumeroBloques = 0;


		mRegalos = new List<Regalo>();

		//Cuando es de xml
		//ProcesarXmlBloque();
		//ProcesarXmlRegalo();

		//Procesando de una clase
		ProcesarClaseBloqueRegalo(liLevel);


		//PonerBloque();

	}

	public void Awake()
	{
		SP = this;
		//CargaInicial();
	}


	//Asignamos el tipo que es, podría ser una clase nueva si al sacamos del xml
	void HacerBloqueTipo(string lsTipo)
	{
		/*
		switch (lsTipo[0])
		{
			case '0': 
				mBrick1.transform.GetComponent<Block>().miDestruccion = 0; 
			break;
			
			case '1': 
				mBrick1.transform.GetComponent<Block>().miDestruccion = 1; 
				break;
			
			case '2': 
				mBrick1.transform.GetComponent<Block>().miDestruccion = 2; 
				break;
			
			case '3': 
				mBrick1.transform.GetComponent<Block>().miDestruccion = 3; 
				break;
			
			case '4': 
				mBrick1.transform.GetComponent<Block>().miDestruccion = 4; 
				break;
			
			default: 
				mBrick1.transform.GetComponent<Block>().miDestruccion = 1; 
			break;
		}
		
		*/
		
		mBrick1.transform.GetComponent<Block>().miDestruccion = Convert.ToInt32(lsTipo[0].ToString());
		
		//mBrick1.renderer.material.mainTexture = (Texture)Resources.Load(lsTipo[0].ToString());

		//mBrick1.renderer.material.SetTexture ("1", (Texture)Resources.Load(lsTipo[0].ToString()));
		/*
		if (( miNumeroBloques > 0) && (miNumeroBloques < 10))
		  mBrick1.renderer.material.mainTexture = (Texture)Resources.Load("2");	
		else		
		  mBrick1.renderer.material.mainTexture = (Texture)Resources.Load("1");
		*/
		//Debug.Log((Convert.ToInt32(lsTipo[0].ToString()) % 2));
		//mBrick1.tag = "Ladrillo" + lsTipo[0].ToString();
		mBrick1.tag = "Pickup";
		
		string lsColor = lsTipo[1].ToString() + lsTipo[2].ToString();
		mBrick1.transform.GetComponent<Block>().miColor = Convert.ToInt32(lsColor.ToString());
		
	}


	void HacerBloque (int liFila, int liCol, string lsTipo)
	{
		mBrick1.transform.localScale = mvEscalaInicial;


		HacerBloqueTipo(lsTipo);
		//mBrick1.GetComponent<Block>().miDestruccion = 1;
		//mBrick1.GetComponent<Block>().miTipoBloque = 1;
		mBrick1.GetComponent<Block>().X = liFila;
		mBrick1.GetComponent<Block>().Y = liCol;
		
		
		//mBrick1.localRotation  //npi de como hacer la rotation ahora con quaternion
		
		//mBrick1.tranform.eulerAngles = new Vector3(45f,67f,123f);

		Vector3 lvPosicion = new Vector3(mvPosicionInicial.x + (liCol * mfSeparacionX), mvPosicionInicial.y, mvPosicionInicial.z + (liFila * mfSeparacionZ));
		
		
		
	  Instantiate(mBrick1, lvPosicion, Quaternion.identity);
		//Debug.Log (lvPosicion.x + "," + lvPosicion.y + "," + lvPosicion.z);
		//Debug.Log(liFila);
		
		/*
		GameObject[] go = GameObject.FindGameObjectsWithTag("Pickup");
		
		foreach (GameObject gos in go)
		  if (( miNumeroBloques > 0) && (miNumeroBloques < 10))
		    gos.renderer.material.mainTexture = (Texture)Resources.Load("2");	
		  else		
		    gos.renderer.material.mainTexture = (Texture)Resources.Load("1");
		*/  
		if (lsTipo[0] != '0') //no es indestructible
			miNumeroBloques++;
	}



	//Cargando desde una clase, ya que abndroid y web no carga la System.xml si no es pagando
	//Intentaré aprovechar lo más posibles las clases que ya tenía hechas y dejar el mismo estilo
	public void ProcesarClaseBloqueRegalo(int liLevel)
	{
		cBloqueManager lBloqueManager = new cBloqueManager();

		lBloqueManager.Init(liLevel);

		//Procesando Bloques
		int i = 0;
		foreach (string lsFila in lBloqueManager.mBloqueManager)
		{
			string[] lsDatos = lsFila.Split(' ');
			int j = 0;
			foreach (string lsDato in lsDatos)
			{
				HacerBloque(i, j, lsDato);
				j++;
			}
			i++;
		}


		//Procesando Regalos
		
		foreach (string lsFila in lBloqueManager.mRegaloManager)
		{
			string[] lsDatos = lsFila.Split(' ');
			Regalo lRegalo = new Regalo();  //Aqui da un warning que no entiendo, es algo de Unity que no le gusta, pero está bien programado (o eso pienso)

			lRegalo.X = Convert.ToInt32(lsDatos[0]);
			lRegalo.Y = Convert.ToInt32(lsDatos[1]);
			lRegalo.Tipo = lsDatos[2];

			mRegalos.Add(lRegalo); 
		}




	}





    /*
	public void ProcesarXmlBloque()
	{
		XmlDocument lDoc = new XmlDocument();
		lDoc.Load(msFicheroLevel);

		//Debug.Log("Dentro de Ver XML");

		XmlNodeList lElemListLevel = lDoc.GetElementsByTagName("Level");
		for (int i = 0; i < lElemListLevel.Count; i++) // buscando un level
		{
			XmlNodeList lElemListRow = lDoc.GetElementsByTagName("Row");
			for (int j = 0; j < lElemListRow.Count; j++)
			{
				string lsRow = lElemListRow[j].InnerXml;
				string[] laCell = lsRow.Split(' ');
				//Debug.Log(lElemListRow[j].InnerXml);
				for (int k = 0; k < laCell.Length; k++)
				{
					//Debug.Log(laCell[k]);
					HacerBloque(j, k, laCell[k]);
				}
			}
		}
	}
	*/
	/*
	//No puedo hace resot, ya que una vez creado los prefabs no tengo ni idea la matriz para posicionar los regalos, tendria que procesar esta primero antes que los bloques y almacenarlo en una matrix para ir construyendo
	public void ProcesarXmlRegalo()
	{
		XmlDocument lDoc = new XmlDocument();
		lDoc.Load(msFicheroLevel);

		GameObject[] goTodosBricks = GameObject.FindGameObjectsWithTag("Pickup");

		
		XmlNodeList lElemListLevel = lDoc.GetElementsByTagName("Regalos");
		for (int i = 0; i < lElemListLevel.Count; i++) // buscando un level
		{
			XmlNodeList lElemListRow = lDoc.GetElementsByTagName("Regalo");
			for (int j = 0; j < lElemListRow.Count; j++)
			{
				string lsRow = lElemListRow[j].InnerXml;

				Regalo lRegalo = new Regalo();  //Aqui da un warning que no entiendo, es algo de Unity que no le gusta, pero está bien programado (o eso pienso)

				//Debug.Log(lElemListRow[j].Attributes["x"].Value);

				lRegalo.X = Convert.ToInt32(lElemListRow[j].Attributes["Fila"].Value);
				lRegalo.Y = Convert.ToInt32(lElemListRow[j].Attributes["Columna"].Value);
				lRegalo.Tipo = lElemListRow[j].Attributes["Tipo"].Value;

				mRegalos.Add(lRegalo);


				//XmlNodeList g = lElemListRow[j].Attributes["x"];
				
				//Debug.Log(x);
				
			
				
			}
		}
	}*/




}
